#include "system.h"

namespace sys
{
	void system_error::init(const char * text, const LONG errorCode)
	{
		LPVOID buffer;
		FormatMessage(
	 		FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
	 		0,
	 		errorCode,
	   		0,
	 		(LPTSTR) &buffer,
	 		10,
	 		NULL);
	    SetMessage("%s. %s (#%d).  ",text,buffer,errorCode);
	    LocalFree(buffer);
	}
	
	system_error::system_error()
	{
		init("System fault.", ::GetLastError());
	}
	
	system_error::system_error(const LONG errorCode)
	{
		init("System fault.", errorCode);
	}
	
	
	sys::system_error::system_error(const char * text)
	{
		init(text, ::GetLastError());
	}
	
	sys::system_error::system_error(const char * text, const LONG errorCode)
	{
		init(text, errorCode);
	}

}
